CloudWatch Logsのロググループ名とログストリーム名の命名規則を一部のAWSサービスに限りまとめてみた
はじめに
マルチアカウント構成において、アカウント発行後にCloudFormationを使ってアカウントのベースライン(セキュリティ、ネットワーク、ログ等)を構築することがよくあります。
その際、AWSサービスごとに1つのロググループをベースラインで作成するか、メンバーアカウント側で必要に応じてロググループを作成するかを検討する必要があります。
1つのロググループに複数のリソースのログを集約する方法と、リソースごとにロググループを作成する方法には、それぞれメリットとデメリットがあります。
- 1つのロググループを集約する
- メリット
- 管理するリソースが減る
- 手動で作成する手間が減る
- ログをクエリする際、関連するログが1つのロググループにまとめられていると効率的になることがある
- デメリット
- 1秒間のログイベント書き込みには制限があるため、エラーになる可能性がある
- 各リソースごとに識別できるログストリーム名でない場合、コンソール上で対象のログが検索しにくい
- アクセス制御の粒度が粗くなる(ロググループレベルでしか制御できない)
- リソース数が多い場合、ログが大量になりクエリのパフォーマンスが低下する可能性がある
- メリット
- リソースごとにロググループを作成する
- メリット
- ユーザーごとにログへのアクセス制御ができる
- リソースごとのログ保持期間を設定できるためコスト削減に繋がる
- 大量のログが発生するリソースの影響が他のリソースに及ばない
- デメリット
- ロググループの数が増えて管理が複雑になる
- 複数のリソースにまたがるログの相関分析が難しくなる
- 類似するリソース間でログ設定を共有できない(設定の重複管理が発生する)
- メリット
1つのロググループに集約する際の課題の1つとして、「各リソースごとに識別できるログストリーム名でない場合、コンソール上で対象のログが検索しにくい」という点が挙げられます。
この点について、AWSドキュメントでは一部のAWSサービスについてはログストリーム名の命名規則が記載されていないため、実際にどのような命名規則になっているのか不明確でした。
また、AWSサービスによっては、ログの保存先となるロググループを選択できない、つまりログを集約できない場合があります。
そこで今回は、個人的によく利用する以下のAWSサービスについて、CloudWatch Logsのロググループ名とログストリーム名の命名規則、および保存先のロググループが選択可能かどうかを調査してまとめました。
- Amazon API Gateway(HTTP API)
- Amazon API Gateway アクセスログと実行ログ(REST API)
- AWS Lambda
- Amazon VPC フローログ
- AWS WAF
- AWS CloudTrail
- Amazon Data Firehose送信エラーログ
- Amazon RDS
- Amazon Aurora(MySQLとPostgreSQL)
- Amazon Route 53 パブリック DNS クエリログ
- Amazon Route 53 Resolver DNS クエリログ
すべてのAWSサービスを網羅しているわけではありませんので、ご了承ください。
API Gateway(HTTP API)
保存先のロググループは選択可能です。
ログストリーム名の命名規則は以下の通りです。
<API Gateway ID>_<ステージ名>-YYYY-MM-DD-hh-mm
複数のリソースを1つのロググループに集約しても、ログストリーム名のみでリソースごとに判別できます。
Amazon API Gateway アクセスログと実行ログ(REST API)
アクセスログと実行ログの2種類があります。
実行ログ
ロググループは以下の命名規則に従って自動作成されます。
API-Gateway-Execution-Logs_<API Gateway ID>/<ステージ名>
保存先のロググループは選択できません。自動作成されたロググループに対して出力されます。
ロググループを選択できないため、ロググループの集約はできません。
アクセスログ
保存先のロググループは選択可能です。
ログストリーム名は以下の通りランダム文字列です
複数のリソースを1つのロググループに集約させると、ログストリーム名のみではリソースごとに判別はできません。
Lambda ログ
ロググループは以下の命名規則に従って自動作成されます。
/aws/lambda/<Lambda関数名>
自動作成されますが、ロググループは変更できます。
ログストリーム名の命名規則は以下の通りです。
YYYY/MM/DD/[関数のバージョン]インスタンスID
- インスタンスIDは、Lambda関数インスタンスを識別するためにAWS側で生成されます。
複数のリソースを1つのロググループに集約させると、ログストリーム名のみではリソースごとに判別はできません。
VPCフローログ
保存先のロググループは選択可能です。
ログストリームは、モニタリングされている各ネットワークインターフェース(ENI)ごとに作成されます。
ログストリーム名の命名規則は以下の通りです。
ENI_ID-all
複数のリソースを1つのロググループに集約しても、ENIごとに判別できます。
ただし、複数のVPCフローログを1つのロググループに集約させると、ログストリーム名のみではVPCごとのログを判別できません。
WAF
保存先のロググループは選択可能です。ただし、選択できるロググループ名は aws-waf-logs-
で始まる必要があります。
ログストリーム名の命名規則は以下の通りです。
<リージョン名>_<Web ACL名>_<番号>
複数のリソースを1つのロググループに集約しても、ログストリーム名のみでリソースごとに判別できます。
CloudTrail
保存先のロググループは選択可能です。
ログストリーム名の命名規則は以下の通りです。
<アカウントID>_CloudTrail_<リージョン名>_<番号>
1アカウントのCloudTrailの証跡を集約させるケースはあまりないですが、複数の証跡を1つのロググループに集約しても、ログストリーム名のみで証跡ごとに判別できます。
Data Firehose送信エラーログ
マネジメントコンソールからは、保存先のロググループは選択できません。自動作成されたロググループに対して出力されます。
AWS CLIやCloudFormationからの作成であれば、保存先のロググループは選択できます。
ロググループは以下の命名規則に従って自動作成されます。
/aws/kinesisfirehose/<Data Firehose名>
以下の2つのログストリームが作成されます。
DestinationDelivery
- Data Firehose送信先へのデリバリーに関するエラーがログに記録されます
BackupDelivery
- 配信先のS3バックアップが有効な場合のみ、作成されます。S3バックアップへのデリバリーに関連するエラーをログに記録するために使用されます。
- S3バックアップとは、宛先に配信しようとしたすべてのデータまたは障害が発生したデータのみをバックアップする機能です。
- 配信先のS3バックアップが有効な場合のみ、作成されます。S3バックアップへのデリバリーに関連するエラーをログに記録するために使用されます。
複数のリソースを1つのロググループに集約させると、ログストリーム名のみではリソースごとに判別はできません。
ただし、常時保存されるログではなくエラー時のみのログであるため、集約することも検討できます。
RDS
保存先のロググループは選択できません。自動作成されたロググループに対して出力されます。
ロググループは以下の命名規則に従って自動作成されます。
/aws/rds/instance/<識別子>/<ログタイプ>
- ログタイプは、各RDSのデータベースエンジンによって異なります。
ログストリーム名の命名規則は以下の通りです。
識別子
ロググループを選択できないため、ロググループの集約はできません。
Aurora
Aurora MySQLとAurora PostgreSQLの2つを紹介します。
どちらも保存先のロググループは選択できません。自動作成されたロググループに対して出力されます。
Aurora MySQL
Aurora MySQLのロググループは以下の命名規則に従って自動作成されます。
/aws/rds/cluster/<識別子>/<ログタイプ>
Aurora MySQLのログストリーム名の命名規則は以下の通りです。
- 監査ログ
<識別子>.audit.log.N.YYYY-MM-DD-HH-MI.0.N
- エラーログ, 一般ログ, スロークエリログ
識別子
ロググループを選択できないため、ロググループの集約はできません。
Aurora PostgreSQL
Aurora PostgreSQLのロググループは以下の命名規則に従って自動作成されます。
/aws/rds/cluster/<識別子>/postgresql
Aurora MySQLのログストリーム名の命名規則は以下の通りです。
インスタンス名
ロググループを選択できないため、ロググループの集約はできません。
Route 53
Route 53 パブリック DNS クエリログとRoute 53 Resolver クエリログの2つを紹介します。
どちらも保存先のロググループは選択可能です。
Route 53 パブリック DNS クエリログ
保存先のロググループは、バージニアリージョンのロググループから選択できます。
ログストリーム名の命名規則は以下の通りです。
<Route 53のホストゾーンID>/<エッジロケーションID>
- 指定されたホストゾーンの DNS クエリに応答する Route 53 エッジロケーションごとに 1つのログログストリームを作成します。
複数のリソースを1つのロググループに集約しても、ログストリーム名のみでリソースごとに判別できます。
ログを有効にすると、以下のログストリーム名が1度だけ作成されます。以降は利用されません。
route53-test-log-stream
Route 53 Resolver DNS クエリログ
保存先のロググループは選択可能です。
ログストリーム名の命名規則は以下の通りです。
VPC ID_YYYYMMDDThhmmZ_クエリ送信元
複数のリソースを1つのロググループに集約しても、ログストリーム名のみでリソースごとに判別できます。
最後に
本記事では、CloudWatch Logsのロググループ名とログストリーム名の命名規則を一部のAWSサービスに限定してまとめました。
ロググループとログストリーム名の命名規則や、保存先のロググループが選択可能かどうか、AWSサービスごとにまちまちであることがわかりました。
AWSサービスごとにログを集約するかどうかを検討する際の参考になれば幸いです。